/*
 * Esse arquivo é parte do Software de Segurança do LaPEC
 * 
 * Copyright (C) 2012-$AnoCorrente$ Dyego Ítallo Silva Ferreira
 * Copyright (C) 2012-$AnoCorrente$ Eduardo Moreira Barbosa
 * Copyright (C) 2012-$AnoCorrente$ João dos Santos Gonçalves
 * 
 * LaPEC é um Software Livre: Você pode redistribuí-lo e/ou modificá-lo
 * de acordo com os termos da Licença Pública Geral GNU (GNU General Public License)
 * conforme publicada pela Free Software Foundation (FSF). Essa permissão é atribuída
 * na versão 3 da Licença, ou (na sua opinião) qualquer versão.
 * 
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa,
 * se não, escreva para a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA  02110-1301  USA
 * 
 * Se você tiver alguma dúvida e/ou quiser dar suporte ao desenvolvimento, favor entrar em
 * contato nos e-mails <dyegoitallo@gmail.com>, <barbosa.edrd@gmail.com>, <john.jsg@hotmail.com>.
 */

package conexaoBiometria;

import java.io.IOException;

/**
 * Classe responsável por organizar os dados enviados do leitor biométrico
 * @author Dyego Ítallo Silva Ferreira
 */
public class Leitor {
    
    // ===============================================================================
    // Atributos
    // ===============================================================================
    private String  porcentagem;
    private String  erro;
    private boolean status;
    
    // ===============================================================================
    // Variáveis globais
    // ===============================================================================
    private ConexaoBiometria conexao;
    private String mensagem;
    
    // ===============================================================================
    // Constantes
    // ===============================================================================
    private final String FIM = "Encerrando a conexão atual."; // Status
    private final String NORMAL = "capturando a digital";

    // ===============================================================================
    // Construtor
    // ===============================================================================    
    public Leitor () {
        this.porcentagem = "0";
        this.erro        = "";
        this.status      = false;
        this.conexao     = new ConexaoBiometria();
        this.mensagem    = "";
    }
    
    
    // ===============================================================================
    // Getters
    // ===============================================================================
    public String getPorcentagem() {
        return porcentagem;
    }

    public String getErro() {
        return erro;
    }

    public boolean isStatus() {
        return status;
    }
    
 
    // ===============================================================================
    // Métodos
    // ===============================================================================
    /**
    * Método responsável por conectar com o leitor colocando os dados
    * referêntes a cada usuário
    * @param matricula - inserir do matricula (aluno) ou siape (professor) 
    * @param numDedo - iserir o número do dedo, referente ao padrão da classe util.Dedo
    * @throws IOException 
    * @author Dyego Ítallo Silva Ferreira
    */
    public void iniciaLeitor(String matricula, int numDedo) throws IOException {
        this.conexao.excluirArquivo(util.Util.ARQUIVO_SAIDA);
        this.conexao.iniciaBiometria(matricula + "-" + numDedo);
    }
    /**
     * Método responsável por atualizar todos os métodos gets desta classe
     * @author Dyego Ítallo SIlva Ferreira
     */
    public void atualizaDadosLeitor() {
        this.mensagem = this.conexao.lerArquivo(util.Util.ARQUIVO_SAIDA);
        //muda status
        status();
        // muda porcentagem
        porcentagem();      
        //muda erro
        erro();
    }
    
    
    // ===============================================================================
    // Funções
    // ===============================================================================
    /**
     * Atualiza o status
     * @author Dyego Ítallo Silva Ferreira
     */
    private void status () {
        if (mensagem.contains(FIM)) {
            this.status = true;
        }
    }
    
    /**
     * Atualiza os erros
     * @author Dyego Ítallo Silva Ferreira
     */
    private void erro() {
        String[] listaMensagem = mensagem.split("\n");
        String erro = "";
        for (int x = 0; x < listaMensagem.length; x++){
            if (listaMensagem[x].contains(this.porcentagem) && !this.status) {
                int indice = x + 1;
                if (indice < listaMensagem.length) {
                    if (!listaMensagem[x + 1].contains(NORMAL)) {
                        this.erro = listaMensagem[x + 1];
                    }else {
                        this.erro = null;
                    }                    
                } else {
                    this.erro = null;
                } 
            }
        }        
    }
    
    /**
     * Muda a porcentagem
     * @author Dyego Ítallo Silva Ferreira
     */
    private void porcentagem () {
        for (int x = 0; x < mensagem.length(); x++) {
            if (mensagem.charAt(x) == '('){
                String y = "";
                for (x++; mensagem.charAt(x) != '%'; x++) {
                    y += mensagem.charAt(x);
                }
                this.porcentagem = y;
            }
        }
    }
    
}
